/*

文件名称：	kckit.h

作    者：	王清

创建时间:	2016-8-15

说    明：	kc工具集的实现文件,封装了string的一些常规操作 

*/

/*

王清	2017-4-20	修改函数作用域

张云腾	2017-4-20	新增kcIsEmpty函数的实现

王清	2017-4-21	新增kcReverse函数的实现

王清	2017-4-25	新增静态函数功能

张云腾  2017-4-27   新增静态函数功能

*/


#include "../include/kckit.h"


//kcFind,重载 

char kc::KCStringKit::kcFind(const std::string& str,unsigned i){

	if((i >= 0) && (i < str.size())){
		return str[i];
	}
	return -1;				//需要进行static_cast操作 
}//end


//kcFind，重载 

int kc::KCStringKit::kcFind(const std::string& str,char ch){

	for(int i = 0;i < str.size();i++){
		if(str[i] == ch){
			return i;
		}
	}
	return -1;
}//end


//kcFind，重载

std::string kc::KCStringKit::kcFind(const std::string& str,unsigned begin,unsigned end){

	/*边界检测*/
	bool condition = (begin >= 0 && begin < str.size()) && (end >= 0 && end < str.size());
	
	if(false == condition){	//满足边界条件 
		std::string temp = "";
		for(int i = begin;i != end;i++){
			temp += str[i];
		}
		return temp;
	}
	else{
		return nullptr;
	}
	
}//end



//判断字符串str是否为空

bool kc::KCStringKit::kcIsEmpty(const std::string& str){

	if (0 == str.length() ) {
		return true;
	}

	return false;
}//end


//对字符串str进行反转

void kc::KCStringKit::kcReverse(std::string& str) {



	for (int i = 0, j = str.length();i < j;i++, j--) {
		/*交换,应使用kcSwap函数*/
		char temp = str[i];
		str[i] = str[j];
		str[j] = temp;
	}
}//end

//将字符串str1后添加字符串str2

void kc::KCStringKit::kcAppend(std::string& str1, const std::string& str2){

	str1 += str2;
}//end


//将字符串str中的re字符全部替换成ch

void kc::KCStringKit::kcReplace(std::string& str, char re, char ch) {

	for (int i = 0;i < str.length();i++) {
		if (str[i] == re) {
			str[i] = ch;
		}
	}
}//end


//将整数转换成对应的字符串

std::string kc::KCStringKit::kcFromInt(int num) {

	//需添加有效性检测

	std::string str = "";

	while (num / 10) {
		str += ('0' + (num % 10));
		num = num / 10;
	}
}//end


//去除字符串两端的空格

void kc::KCStringKit::kcTrim(std::string& str) {

	//pass

}//end





//将str的字符全部转为大写

void kc::KCStringKit::kcToUpperCase(std::string& str) {



}

//将字符ch插入到str字符串的第i个位置

void kc::KCStringKit::kcInsert(std::string& str, unsigned i, char ch){

	char c = str[str.size() - 1];
	for (int j = str.size() - 1; j >= i; j--){
		str[j] = str[j - 1];
	}
	str[i - 1] = ch;
	str += c;
}

//将字符串sub插入到str字符串的第i个位置

void kc::KCStringKit::kcInsert(std::string& str, unsigned i, const std::string& sub){

	std::string str1, str2;
	for (int j = 0; j < i; j++){
		str1 += str[j];
	}
	for (int k = i; k < str.size(); k++){
		str2 += str[k];
	}
	str = str1 + sub + str2;
}


//将字符串str中第i位置的字符删除

void kc::KCStringKit::kcDelete(std::string& str, unsigned i){

	for (int j = i; j <= str.size() - 1; j++){
		str[j - 1] = str[j];
	}
	str[str.size() - 1] = '\0';
}

//将字符串str中start到end之间的字符删除

void kc::KCStringKit::kcDelete(std::string& str, unsigned start, unsigned end){

	for (int j = end; j <= str.size() - 1; j++){
		str[j - end + start - 1] = str[j];
	}
	for (int k = str.size() - 1; k >= str.size() - 1 - end + start; k--){
		str[k] = '\0';
	}
}


//将字符串str中的所有ch字符删除

void kc::KCStringKit::kcDelete(std::string& str, char ch){

	int j = 0;
	for (int i = 0; i < str.size(); i++){
		if (str[i] != ch){
			str[j++] = str[i];
		}
	}
	while (j != str.size()){
		str[j] = '\0';
		j++;
	}
}